home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / unixlib.lha / unix / src / mktemp.c < prev    next >
C/C++ Source or Header  |  1996-08-19  |  787b  |  42 lines

  1. #include "amiga.h"
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <sys/stat.h>
  5.  
  6. int _sprintf(char *, const char *,...);
  7.  
  8. char *mktemp(char *name)
  9. {
  10.     static unsigned long next = 0;
  11.     int n = 0, l = strlen(name);
  12.     char letter = 'A';
  13.     char *change;
  14.     char id[9], *end_id;
  15.     struct stat buf;
  16.  
  17.     __chkabort();
  18.     for(change = name + l - 1; *change == 'X'; --change)
  19.     ++n;
  20.     ++change;
  21.  
  22.     if(!n)
  23.     return NULL;  /* no trailing Xs */
  24.  
  25.     _sprintf(id, "%lx", (long)_us + next++);
  26.     l = strlen(id);
  27.     end_id = l > n ? id + l - n : id;
  28.     _sprintf(change, "%s", end_id);
  29.  
  30.     while (*change) {
  31.     *change = letter++;
  32.     if (stat(name, &buf))
  33.         return name;
  34.     if (letter > 'Z') {
  35.         letter = 'A';
  36.         *change++ = letter;
  37.     }
  38.     }
  39.     name[0] = '\0';
  40.     return(NULL);
  41. }
  42.